<?php
	abstract class Metodos
	{
		protected $Error;
		protected $ErrorMsg;
		
		
		public function __construct()
		{
			$this->Error    = true;
			$this->ErrorMsg = "";
		}
		
		
		public function GetError()
		{
			return $this->Error;
		}
		
		
		public function GetErrorMsg()
		{
			return $this->ErrorMsg;
		}
		

		/**************************************************************************************
											CRIPTOGRAFIA
		**************************************************************************************/
		
		/*
		//REALIZANDO A CRIPTOGRAFIA EM MD5, BYTE A BYTE
		*/
		public function Criptografar($_value)
		{
			$_value = trim($_value);			
			for($i = 0; $i < strlen($_value); $i++)
			{
				$_senha = md5($_senha . $_value[$i]);
			}
			
			return md5(md5(md5($_senha)));
		}		
		
		 
		/*
		//CRIPTOGRAFIA E DESCRIPTOGRAFIA BASE64
		//OBS: SEMPRE DEIXAR O MESMO NUMERO LOOPING EM AMBOS OS METODOS  
		*/
		public function CriptografarBase64($str)
		{
			for($i = 0; $i < 5; $i++)  
			{
				$str = strrev(base64_encode($str)); //CRIPTOGRAFAR BASE64 
			}
			return $str;
	    }		
	    
	    public function DescriptografarBase64($str)
		{
			for($i = 0; $i < 5; $i++)
			{
				$str =   base64_decode(strrev($str)); //DECRIPTOGRAFAR BASE64 
			}
			return $str;
	    }
		
		
		/*
		//REMOVE POSSIVEIS PALAVRAS E SIMBOLOS DE INVASAO
		*/
		protected function RemoverInjection($_value)
		{
			$_value = trim($_value);//REMOVE ESPACO VAZIO
			$_value = strip_tags($_value);//REMOVE TAGS HTML E PHP
			$_value = addslashes($_value);//ADICIONA BARRAS INVERTIDAS A UMA STRING
			$_value = preg_replace("/(from|select|insert|delete|where|drop table|drop |show tables|#|\*|--|\\\\)/i","",$_value); 
			
			return $_value;
		}
		
		
		
		
		
		/**************************************************************************************
									VALIDAR ENTRADA DE DADOS
		**************************************************************************************/
		
		protected function ValidarVazio($_value, $_campo)
		{			
			if(empty($_value))
			{
				$this->ErrorMsg = "Por favor, preencha o campo <span>".$_campo."</span>";
				$this->Error    = true;
			}
			else						
				return $_value;			
		}
		
		
		/*
		//DELIMITA O MAXIMO DE CARACTERES E ACEITA NULO
		*/
		protected function ValidarTamanhoMaximo($_maximo,$_value,$_campo)
		{
			$_value = trim($_value);
			if(strlen($_value) > $_maximo)
			{
				$this->ErrorMsg = "Campo <span>".$_campo."</span> deve ter no máximo ".$_maximo." caracteres";
				$this->Error    = true;
				return $_value;
			}
			else
			{
				$_value = stripslashes($_value);
				return addslashes($_value);
			}
		}
		
		
		/*
		//DELIMITA O MINIMO DE CARACTERES E ACEITA NULO
		*/
		protected function ValidarTamanhoMinimo($_minimo,$_value,$_campo)
		{
			$_value = trim($_value);
			if(strlen($_value) > $_minimo)
			{
				$this->ErrorMsg = "Campo <span>".$_campo."</span> deve ter no mínimo ".$_minimo." caracteres";
				$this->Error    = true;
				return $_value;
			}
			else
			{
				$_value = stripslashes($_value);
				return addslashes($_value);
			}
		}
		
		
		/*
		//DELIMITA O MINIMO E O MAXIMO DE CARACTERES
		*/
		protected function ValidarTamanho($_minimo,$_maximo, $_value, $_campo)
		{
			$_value = trim($_value);
			if(empty($_value))
			{
				$this->ErrorMsg = "Por favor, preencha o campo <span>".$_campo."</span>";
				$this->Error    = true;
				return $_value;
			}
			elseif($_maximo < strlen($_value))
			{
				$this->ErrorMsg = "Campo <span>".$_campo."</span> deve ter no máximo ".$_maximo." caracteres";
				$this->Error    = true;
				return $_value;
			} 
			elseif($_minimo > strlen($_value))
			{
				$this->ErrorMsg = "Campo <span>".$_campo."</span> deve ter no mínimo ".$_minimo." caracteres";
				$this->Error    = true;
				return $_value;
			}
			else
			{
				$_value = stripslashes($_value);		
				return addslashes($_value);
			}
		}
		
		
		/*
		//
		*/
		protected function ValidarDropDown($_minimo,$_value,$_campo)
		{			
			if($_value == $_minimo)
			{
				$this->ErrorMsg = "Por favor, escolha uma opção no campo <span>".$_campo."</span>";
				$this->Error    = true;
			}
			else
				return $_value;
		}
		
		
		/*
		//VERIFICA SE O E-MAIL PASSADO E VALIDO
		*/
		protected function ValidarEmail($_value)
		{
			$_value = trim($_value);			
			if(!preg_match("/^[a-z0-9_\.\-]+@[a-z0-9_\.\-]*[a-z0-9_\-]+\.[a-z]{2,4}$/", $_value)) 
			{
				$this->ErrorMsg = "Por favor, Insira um e-mail válido.";
				$this->Error    = true;
				return $_value;
			}
			else			
				return $_value;			
		}
		
		
		/*
		//VALIDA NUMERO, NAO ACEITA STRING
		*/
		public function ValidarNumero($_value,$_campo)
		{
			$_value = trim($_value);
			if(empty($_value))
			{				
				$this->ErrorMsg = "Por favor, preencha o campo <span>".$_campo."</span>";
				$this->Error    = true;
				return $_value;				
			}
			elseif(!is_numeric($_value))
			{
				$this->ErrorMsg = "Por favor, Insira apenas números no campo <span>".$_campo."</span>";
				$this->Error    = true;
				return $_value;
			}
			else 
				return $_value;
		}
		
		
		protected function ValidarData($_valueData,$_condicao,$_dataCondicao,$_campo,$_campoCondicao)
		{
			if($_condicao == "<")
			{
				if($_valueData < $_dataCondicao)
				{
					return $_valueData;
				}				
				else
				{
					$this->ErrorMsg = "O campo <span>".$_campo."</span> deve ser menor que <span>".$_campoCondicao."</span>";
					$this->Error    = true;
				}					
			}elseif($_condicao == "<=")	{
				if($_valueData <= $_dataCondicao)
				{
					return $_valueData;
				}				
				else
				{
					$this->ErrorMsg = "O campo <span>".$_campo."</span> deve ser menor ou igual que <span>".$_campoCondicao."</span>";
					$this->Error    = true;
				}					
			}elseif($_condicao == "==")	{
				if($_valueData == $_dataCondicao)
				{
					return $_valueData;
				}				
				else
				{
					$this->ErrorMsg = "O campo <span>".$_campo."</span> deve ser igual que <span>".$_campoCondicao."</span>";
					$this->Error    = true;
				}					
			}elseif($_condicao == ">")	{
				if($_valueData > $_dataCondicao)
				{
					return $_valueData;
				}				
				else
				{
					$this->ErrorMsg = "O campo <span>".$_campo."</span> deve ser maior que <span>".$_campoCondicao."</span>";
					$this->Error    = true;
				}					
			}elseif($_condicao == ">=")	{
				if($_valueData >= $_dataCondicao)
				{
					return $_valueData;
				}				
				else
				{
					$this->ErrorMsg = "O campo <span>".$_campo."</span> deve ser maior ou igual que <span>".$_campoCondicao."</span>";
					$this->Error    = true;
				}					
			}
		}
		

		
		/**************************************************************************************
									RETORNAR DADOS
		**************************************************************************************/

		
		/*
		//RETORNA MULTISELECT SEPARANDO VALORES POR VIRGULA
		*/
		public function RetornarMultiselect($_value, $_campo)
		{
			foreach($_value as $item)
			{								
				$id = $item."!";//COLOCO ! PORQUE NO FINAL DE CADA VOLTA DO FOREACH O PHP COLOCA PONTO(.)
				$id = str_replace(".!", ",", $id);//DAI EU TROCO O .! POR VAZIO
				$grupo_ids = $grupo_ids."".$id;
			}
			$grupo_ids = rtrim($grupo_ids,',');//REMOVE A ULTIMA VIRGULA DA SRING
			
			if(Empty($grupo_ids))
			{
				$this->ErrorMsg = "Por favor, escolha pelo menos uma opção no campo <span>".$_campo."</span>";
				$this->Error    = true;
			}else{
				return $grupo_ids;
			} 				

		}


		/*
		//RETORNA MULTISELECT SEPARANDO VALORES POR VIRGULA E COM ASPAS SIMPLES
		*/
		public function RetornarMultiselectAspas($_value, $_campo)
		{
			foreach($_value as $item)
			{								
				$id = $item."!";//COLOCO ! PORQUE NO FINAL DE CADA VOLTA DO FOREACH O PHP COLOCA PONTO(.)
				$id = str_replace(".!", "',", $id);//DAI EU TROCO O .! POR VAZIO
				$grupo_ids = $grupo_ids."'".$id;
			}
			$grupo_ids = rtrim($grupo_ids,',');//REMOVE A ULTIMA VIRGULA DA SRING
			
			if(Empty($grupo_ids))
			{
				$this->ErrorMsg = "Por favor, escolha pelo menos uma opção no campo <span>".$_campo."</span>";
				$this->Error    = true;
			}else{
				return $grupo_ids;
			} 				

		}
		
		
		public function ConverterData($data) 
		{
			$data = trim($data);
		    // Recebemos a data no formato: dd/mm/aaaa
		    // Convertemos a data para o formato: aaaa-mm-dd e vise-versa.
		 	$data_nova = implode(preg_match("~\/~", $data) == 0 ? "/" : "-", array_reverse(explode(preg_match("~\/~", $data) == 0 ? "-" : "/", $data)));		
		    return str_replace("'","",$data_nova);
		}
		
		
		public function ConverterSimples($strData)
		{
			$_value = str_replace("-", "/", $strData);
			return $_value;
		}
		
		
		public function RetornarNomeMes($_value)
		{
			$_value = trim($_value);
			$mes = $_value;
		    switch ($mes) 
		    {
    			case "01": $mes = "Janeiro";   break;
		        case "02": $mes = "Fevereiro"; break;
		        case "03": $mes = "Março";     break;
		        case "04": $mes = "Abril";     break;
		        case "05": $mes = "Maio";      break;
		        case "06": $mes = "Junho";     break;
		        case "07": $mes = "Julho";     break;
		        case "08": $mes = "Agosto";    break;
		        case "09": $mes = "Setembro";  break;
		        case "10": $mes = "Outubro";   break;
		        case "11": $mes = "Novembro";  break;
		        case "12": $mes = "Dezembro";  break; 
		 	}
			return $mes;
		}
		
		
		
				
		/**************************************************************************************
									RETORNAR REGISTROS BANCO DE DADOS
		**************************************************************************************/		
				
		/*
		//CONTA QUANTOS REGISTROS UMA ENTIDADE POSSUI
		*/
		public function ContarRegistros($_entidade)
		{
			$_query = mysql_query("SELECT COUNT(*) AS TOTAL FROM $_entidade");
			$_linha = mysql_fetch_array($_query);
			return $_linha["TOTAL"];
		}	
		

		/*
		//CONTA QUANTOS REGISTROS UMA ENTIDADE POSSUI COM CONDICIONAL
		*/
		public function ContarRegistrosCondicional($_entidade,$_condicional)
		{
			$_query = mysql_query("SELECT COUNT(*) AS TOTAL FROM $_entidade WHERE $_condicional");
			$_linha = mysql_fetch_array($_query);
			return $_linha["TOTAL"];
		}	
		
		
		/*
		 * CARREGA UM INPUT DO TIPO SELECT
		 * obs: nome do input do tipo select e o mesmo nome da entidade do banco de dados
		 */	
		public function DropDown($_id, $tabela, $coluna_chave, $coluna_valor, $where, $order_by)
		{			
			$_query = mysql_query("SELECT $coluna_chave, $coluna_valor FROM $tabela $where $order_by");
			echo "<select name='$tabela' id='$tabela'>				      
				  	<option selected value='0'>SELECIONE</option>";						
					if($_id == '0')
					{
						while($_linha = mysql_fetch_array($_query))
						{
							echo "<option value='$_linha[$coluna_chave]'>".htmlentities($_linha[$coluna_valor])."</option>";
						}				
					}
					else
					{
						while($_linha = mysql_fetch_array($_query))
						{
							if($_id == $_linha[$coluna_chave])			
								echo "<option selected value='$_linha[$coluna_chave]'>".htmlentities($_linha[$coluna_valor])."</option>";
							else 
								echo "<option value='$_linha[$coluna_chave]'>".htmlentities($_linha[$coluna_valor])."</option>";					
						}				
					}	
			echo "</select>";		
		}
		
		
		
		
				
		/**************************************************************************************
									UPLOAD
		**************************************************************************************/		
		
		/*
		//FAZ UPLOAD DE IMAGEM
		*/
		protected function UploadImagem($_imagem,$_campo,$_diretorio,$_nome,$_obrigatorio)
		{							
			if($_imagem['size'] > 0)//VERIFICA SE HÁ ALGUM ARQUIVO CARREGADO
			{
				if(eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $_imagem["type"]))//VERIFICA SE E IMAGEM
				{
		     	   if(empty($_nome))//VAZIO SERA GERADO UM NOME RADOMICAMENTE E CADASTRADO. SENAO SUBSTITUI A IMAGEM NO SERVIOR E MANTEM O MESMO NOME.
					{
						$extensao  = strtolower(strrchr($_imagem["name"],"."));
						$novo_nome = rand(000000000,999999999);			
						$_nome     = $novo_nome.$extensao;
					}
					
					if(@move_uploaded_file($_imagem['tmp_name'], $_diretorio.$_nome)) //Faz o upload da imagem
					{						
						return $_nome;
					}				
					else
					{
						$this->ErrorMsg = "Falha ao fazer upload.";$
						$this->Error    = true;
					}
		   	 	} 
				else
				{
					$this->ErrorMsg = "Este arquivo selecionado no campo <span>".$_campo."</span> não é uma imagem.";
					$this->Error    = true;
				}				
			}
			elseif(($_imagem['size'] == 0) && ($_obrigatorio == 'SIM') && ($_nome == ""))
			{
				$this->ErrorMsg = "Por favor, selecione alguma imagem no campo <span>".$_campo."</span>";
				$this->Error    = true;
			}
			else //se cair nessa condicao, o usuario esta editando o conteudo mas nao a imagem, dai retorno o mesmo nome de entrada que foi passado como parametro para editar o nome antigo pelo mesmo nome antigo
				return $_nome;		
		}
		/*
				switch($imagem['error']){
				case 0:
					
					if( $imagem['size'] > 2000000 ){
						$status = "warning";
			            $msg = "Tamanho limite excedido. O arquivo não deve passar de no máximo 2MB!";
			            echo json_encode( array("status" => $status, "msg" => $msg, "js" => $js) );
			            exit();
					}
					
					$arrExt = array('jpg','jpeg','gif','png');
					list($tipo, $ext) = explode('/', $imagem['type']);
					
					if( $tipo == 'image' ){
						if( in_array($ext, $arrExt) ){
							
							$dir = "../uploads/cervejas/";
							$image = md5(uniqid(rand(),true));
							$file = "$dir/$image";					
							move_uploaded_file($imagem['tmp_name'], $file);
							
							if( !is_file($file) ){
								$status = "error";
					            $msg = "Erro ao tentar redimensionar ou mover imagem!";
					            echo json_encode( array("status" => $status, "msg" => $msg, "js" => $js) );
					            exit();
							}
							
						}else{
							$status = "warning";
				            $msg = "O Tipo de imagem $ext não é aceito!";
				            echo json_encode( array("status" => $status, "msg" => $msg, "js" => $js) );
				            exit();
						}
						
					}else{
						$status = "warning";
			            $msg = "O arquivo enviado não é uma imagem!";
			            echo json_encode( array("status" => $status, "msg" => $msg, "js" => $js) );
			            exit();
					}
					break;
					
				case 1:
					$status = "warning";
		            $msg = "O Tamanho do arquivo não é suportado pelo servidor!";
		            echo json_encode( array("status" => $status, "msg" => $msg, "js" => $js) );
		            exit();
					break;
				case 2:
					$status = "warning";
		            $msg = "Tamanho limite excedido. O arquivo não deve passar de no máximo 2MB!";
		            echo json_encode( array("status" => $status, "msg" => $msg, "js" => $js) );
		            exit();
					break;
				case 3:
					$status = "error";
		            $msg = "O arquivo foi corrompido. Tente novamente!";
		            echo json_encode( array("status" => $status, "msg" => $msg, "js" => $js) );
		            exit();
					break;
				case 4:
					$status = "error";
		            $msg = "Não foi enviado nenhum arquivo para o servidor!";
		            echo json_encode( array("status" => $status, "msg" => $msg, "js" => $js) );
		            exit(); 
					break;
				default:;
			}*/
		
	}
?>